/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.component.schedule.facade.job;

import cn.hutool.cron.pattern.CronPatternBuilder;
import info.peigen.hotpot.component.schedule.facade.command.result.ScheduleExecuteResult;
import info.peigen.hotpot.component.schedule.facade.enums.ScheduleCommunicationMethod;

/**
 * <b>(ScheduleFacadeJob)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2022/12/29
 */
public interface ScheduleFacadeJob {

    /**
     * 构建jobName
     *
     * @return jobName
     */
    String jobName();

    /**
     * 构建Cron表达式
     *
     * @return CronPatternBuilder
     */
    CronPatternBuilder cron();

    /**
     * 构建通讯方式
     *
     * @return ScheduleCommunicationMethod
     */
    ScheduleCommunicationMethod method();

    /**
     * 构建调用配置，涵盖Http以及Webservice以及其他
     *
     * @return URL or EndPoint
     */
    String urlOrEndPoint();

    /**
     * 任务执行超时时间，单位秒
     *
     * @return int 任务执行超时时间
     */
    int executeTimeout();

    /**
     * 失败重试次数
     *
     * @return int 失败重试次数
     */
    int executeFailRetryCount();

    /**
     * 执行
     *
     * @return ScheduleExecuteResult
     */
    ScheduleExecuteResult execute();
}